package game;


import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.image.ImageObserver;

import rps.RPSClient;

public class PintarLienzo {

	private ImageObserver observer;

	public PintarLienzo(ImageObserver observer) {
		this.observer = observer;
	}

	public void pintaLinea3D(Graphics gdb, int x1, int y1, int x2, int y2) {
		Point pI1 = Coordenadas.getPosicion3D(x1, y1);
		Point pF1 = Coordenadas.getPosicion3D(x1 + 1, y1);

		Point pI2 = Coordenadas.getPosicion3D(x2, y2);
		Point pF2 = Coordenadas.getPosicion3D(x2 + 1, y2);

		for (int xR1 = pI1.x; xR1 <= pF1.x; xR1++)
			for (int xR2 = pI2.x; xR2 <= pF2.x; xR2++)
				gdb.drawLine(xR1, pI1.y, xR2, pI2.y);
	}

	public void pintaLinea2D(Graphics gdb, int x1, int y1, int x2, int y2) {
		Point p1 = Coordenadas.getPosicion2D(x1, y1);
		Point p2 = Coordenadas.getPosicion2D(x2, y2);
		gdb.drawLine(p1.x, p1.y, p2.x, p2.y);
	}

	public void pintaCabezaBolo(Graphics gdb, int x, int y) {
		for (int n = 0; n < 10; n++) {
			gdb.setColor(new Color(n * 20, 128 + n * 10, 255));
			gdb.fillOval(x + n * 3 / 2, y + n / 2, 20 - n * 2, 20 - n * 2);
		}
	}

	public void pintaBolo(Graphics g, Image bolo, Image boloTumbado[], Bolo b) {
		if (b.getEstado() != -2) {
			int x = b.getX();
			int y = b.getY();
			int estado = b.getEstado();
			// Point p2D=Coordenadas.getPosicion2D(x,y);
			Point p3D = Coordenadas.getPosicion3D(x, y);
			if (estado == -1) {
				// g.drawImage(bolo, p2D.x-5, p2D.y-20, 14, 30, observer);
				g.drawImage(bolo, p3D.x - 5, p3D.y - 20, 14, 30, observer);
			} else {
				// g.drawImage(boloTumbado[estado], p2D.x-20, p2D.y-5, 70, 20,
				// observer);
				g.drawImage(boloTumbado[estado], p3D.x - 20, p3D.y - 5, 65, 30,
						observer);
			}
		}
	}

	public void pintaFlecha(Graphics g, Flecha f, Bola b,
			ImageObserver observador) {
		int x1, y1, x2, y2;
		double angulo = f.getAngulo();
		y1 = 250;
		x1 = f.getX();
		x2 = (int) (x1 + Math.cos(angulo) * 50);
		y2 = (int) (y1 - Math.sin(angulo) * 10);
		g.setColor(Color.white);
		// pintaLinea2D(g,x1,y1,x2,y2);
		pintaLinea3D(g, x1, y1, x2, y2);
		g.drawImage(b.getBola(), x1, y1, x2, y2, observador);
	}

	public void pintaVelocidad(Graphics g, int nVelocidad) {
		g.setColor(Color.white);
		g.fillRect(674, 113, 13 * 6, 5);
		g.setColor(Color.green);
		g.fillRect(674, 113, nVelocidad * 6, 5);
	}

	public void pintarPersonaje(Graphics g, Image personaje, String nick) {
		g.drawImage(personaje, 674, 47, 75, 70, observer);
		g.setFont(new Font("Arial", 1, 12));
		String sTexto;
		g.setColor(Color.white);
		sTexto = "Esta lanzando "+nick;
		g.drawString(sTexto, 645,40);		
	}

	public void pintaBola(Graphics g, Bola b, ImageObserver observador) {
		if (b.isVisible()) {
			int x = b.getX();
			int y = b.getY();
			// Point p2D=Coordenadas.getPosicion2D(x,y);
			Point p3D = Coordenadas.getPosicion3D(x, y);
			int tam3D = Coordenadas.getDimension3D(y, 30);
			// int tam2D=16;
			// g.setColor(Color.black);
			// g.fillOval(p2D.x-tam2D/2, p2D.y-tam2D/2, tam2D, tam2D);
			// bola=Toolkit.getDefaultToolkit().getImage( "imagenes/pin.png");
			// g.fillOval(p3D.x-tam3D/2, p3D.y-tam3D/2, tam3D, tam3D);
			g.drawImage(b.getBola(), p3D.x - tam3D / 2, p3D.y - tam3D / 2,
					tam3D, tam3D, observador);
		}
	}

	public void pintarPuntuacion(Graphics g, Puntuacion p, RPSClient client) {

		int nPuntos[][] = p.getNPuntos();
		int total[] = new int[20];
		g.setFont(new Font("Arial", 1, 12));
		int dx = 14, dy = 11, ex = 24, ey = 23, posx = 0, posy = 1, delx = 24;
		String sTexto = "";
		for (int n = 0; n < nPuntos.length; n++) {
			for (int m = 0; m < nPuntos[n].length; m++) {
				// g.setColor(Color.white);
				// g.fillRect(n*ex+dx, m*ey+dy, ex, ey);
				g.setColor(Color.white);
				// g.drawRect(n*ex+dx, m*ey+dy, ex, ey);

				if (nPuntos[n][m] != -1) {
					sTexto = "" + nPuntos[n][m];
					if (m == 0 && nPuntos[n][m] == 10) {
						sTexto = "X";
						ex = 26;
						dx = 20;
						delx = 27;
					} else if (m == 1 && nPuntos[n][0] + nPuntos[n][1] == 10) {
						delx = 24;
						dx = 13;
						ex = 24;
						sTexto = "/";
					} else if (nPuntos[n][m] == 0) {
						delx = 24;
						dx = 13;
						ex = 24;
						sTexto = "-";
					}
					g.drawString(sTexto, posx * ex + dx + 60, posy * ey + dy
							+ 42);
					
					if (m == 1) {
						total[posx] = p.getNTotalPuntos();
						// System.out.println("\n\nposx: "+total[posx]);
						// System.out.println("\n\nposanterior: "+total[posx-1]);
						g.drawString("" + total[posx], posx * delx + dx + 45,
								posy + dy + 87);
						dx = 13;
					} else
						dx = 13;	
					
					posx++;
				}				
			}			
		}
		// Puntuacion final
		// g.setFont(new Font("Arial", 1, 18));
		// g.setColor(Color.white);
		// g.fillRect(10*ex+dx, dy, ex*4, ey*2);
		// g.setColor(Color.white);
		// g.drawRect(10*ex+dx, dy, ex*4, ey*2);
		// g.drawString(""+p.getNTotalPuntos(), 10*ex+dx+343, posy+dy+47);		
	}

}
